Const Pi = 3.14159265358979
Const Max = 10000

Type Sign
    Cst As Double
    An(1 To 10) As Double
    Bn(1 To 10) As Double
    t As Double
    End Type

Public Signal As Sign
Public Z(1 To Max) As Double


Sub AnBn() 'recherche les composante du signal

Dim Sc, Ss As Double

'Recherche tout les AN BN
For f = 1 To UBound(Signal.An)
    Sc = 0
    Ss = 0
    'Calcule l'integrale de signal x COs(NF t)  ET Sin(Nf T)
    For n = 1 To Signal.t
        Teta = f * n * 2 * Pi / Signal.t
        Sc = Sc + Z(n) * Cos(Teta)
        Ss = Ss + Z(n) * Sin(Teta)
    Next n
    
    Signal.An(f) = 2 * Sc / (Signal.t)
    Signal.Bn(f) = 2 * Ss / (Signal.t)
    
'ne prend pas en compte les AN BN trop faibles
 If Abs(Signal.Bn(f)) < 0.0001 Then Signal.Bn(f) = 0
 If Abs(Signal.An(f)) < 0.0001 Then Signal.An(f) = 0
 
Next f

End Sub

Sub Periode() 'recherche la Periode T du Signal
Dim Ss As Double
Smin = 1000

Fenetre = UBound(Z) / 100
maxi = 50

Do

    maxi = maxi + 1
    Ss = 0
    
    'Compare le signal entre l'instant N et N+T
    For n = 1 To Fenetre
    Ss = Ss + (Z(n + maxi) - Z(n))
    Next n
    
'Si la comparaison et minimum c'est que T est la bonne periode
If Abs(Smin) > Abs(Ss) Then
    Smin = Ss
    Signal.t = maxi
    End If
    
Loop Until Ss = 0 Or maxi = Max - Fenetre - 1

 maxi = Signal.t
End Sub


Sub Offset()  'recherche la Partie continue
Dim Ss As Double
Ss = 0
    For n = 1 To Signal.t
    Ss = Ss + (Z(n) / Signal.t)
    Next n
Signal.Cst = Ss
End Sub




Sub Analyse()
Periode
Offset
AnBn
End Sub

